package cc.z8g.browser.core

import cc.z8g.browser.database.Bookmark
import cc.z8g.browser.ssl.SslState
import cc.z8g.browser.utils.Option

/**
 * 浏览器视图状态
 */
data class BrowserViewState(
    /** 搜索框 - 搜索框中显示的当前文本 */
    val displayUrl: String,
    /** 搜索框 - 在搜索框中显示的当前 SSL 状态 */
    val sslState: SslState,
    /** 搜索框 - 如果刷新按钮显示刷新图标，则为 true，如果显示 X，则为 false */
    val isRefresh: Boolean,

    /** 当前页面加载进度，范围为 0 到 100 */
    val progress: Int,
    /** 根据当前网页确定的 UI 主题颜色 */
    val enableFullMenu: Boolean,
    /** 如果应启用前进按钮，则为 true，否则为 false */
    val themeColor: Option<Int>,

    /** 如果应启用前进按钮，则为 true，否则为 false */
    val isForwardEnabled: Boolean,
    /** 如果应启用后退按钮，则为 true，否则为 false */
    val isBackEnabled: Boolean,

    /** 书签 - 当前显示的书签列表 */
    val bookmarks: List<Bookmark>,
    /** 书签 - 如果当前页面已加书签，则为 true，否则为 false */
    val isBookmarked: Boolean,
    /** 书签 - 如果应允许用户加书签当前页面，则为 true，否则为 false */
    val isBookmarkEnabled: Boolean,
    /** 书签 -如果当前书签文件夹是根文件夹，则为 true，否则为 false */
    val isRootFolder: Boolean,

    /** 页面内查找的关键词 */
    val findInPage: String
)

/**
 * [BrowserViewState] 的部分拷贝，其中 null 表示该值未更改。
 */
data class PartialBrowserViewState(
    // search bar
    val displayUrl: String?,
    val sslState: SslState?,
    val isRefresh: Boolean?,
    val enableFullMenu: Boolean?,
    val themeColor: Option<Int>?,

    // Tabs
    val isForwardEnabled: Boolean?,
    val isBackEnabled: Boolean?,

    // Bookmarks
    val bookmarks: List<Bookmark>?,
    val isBookmarked: Boolean?,
    val isBookmarkEnabled: Boolean?,
    val isRootFolder: Boolean?,

    // find
    val findInPage: String?
)
